package cn.lg.soar.mvc.log;

import cn.lg.soar.core.util.SoarSubscriber;

/**
 * 日志工具，与ILogHandler功能一致，仅为方便使用提供
 * @author luguoxiang
 * @date 2022/4/23
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public class LogUtils {

    private static ILogHandler logHandler;

    static {
        SoarSubscriber.subscribeRunner(a -> {
            logHandler = a.getBean(ILogHandler.class);
        });
    }

    /**
     * 异步操作日志（异步保存，独立线程处理）
     * @param operate 操作
     */
    public static void log(String operate) {
        logHandler.log(operate, null, null, null);
    }

    /**
     * 异步操作日志（异步保存，独立线程处理）
     * @param operate 操作
     * @param data 操作数据
     */
    public static void log(String operate, Object data) {
        logHandler.log(operate, data, null, null);
    }

    /**
     * 异步操作日志（异步保存，独立线程处理）
     * @param operate 操作
     * @param data 操作数据
     * @param dataId 操作数据的id
     */
    public static void log(String operate, Object data, String dataId) {
        logHandler.log(operate, data, dataId, null);
    }

    /**
     * 异步操作日志（异步保存，独立线程处理）
     * @param operate 操作
     * @param data 操作数据
     * @param dataId 操作数据的id
     * @param dataType 数据类型（比如表名、类名等）
     */
    public static void log(String operate, Object data, String dataId, String dataType) {
        logHandler.log(operate, data, dataId, dataType);
    }

    /**
     * 同步操作日志（同步保存，占用业务线程）
     * @param operate 操作
     */
    public static void logSync(String operate) {
        logHandler.logSync(operate, null, null, null);
    }

    /**
     * 同步操作日志（同步保存，占用业务线程）
     * @param operate 操作
     * @param data 操作数据
     */
    public static void logSync(String operate, Object data) {
        logHandler.logSync(operate, data, null, null);
    }

    /**
     * 同步操作日志（同步保存，占用业务线程）
     * @param operate 操作
     * @param data 操作数据
     * @param dataId 操作数据的id
     */
    public static void logSync(String operate, Object data, String dataId) {
        logHandler.logSync(operate, data, dataId, null);
    }

    /**
     * 同步操作日志（同步保存，占用业务线程）
     * @param operate 操作
     * @param data 操作数据
     * @param dataId 操作数据的id
     * @param dataType 数据类型（比如表名、类名等）
     */
    public static void logSync(String operate, Object data, String dataId, String dataType) {
        logHandler.logSync(operate, data, dataId, dataType);
    }

}
